package pacs.sgc.fachada;

import java.util.List;

import pacs.sgc.classesbasicas.Cliente;
import pacs.sgc.classesbasicas.Endereco;
import pacs.sgc.exceptions.AcessoAoBancoException;
import pacs.sgc.exceptions.ClienteJaCadastradoException;
import pacs.sgc.exceptions.ClienteNaoEncontradoException;
import pacs.sgc.exceptions.ConexaoComBancoException;
import pacs.sgc.exceptions.EnderecoJaCadastradoException;
import pacs.sgc.exceptions.EnderecoNaoEncontradoException;
import pacs.sgc.exceptions.NenhumClienteCadastradoException;
import pacs.sgc.exceptions.NenhumEnderecoCadastradoException;
import pacs.sgc.negocio.CadastroCliente;
import pacs.sgc.negocio.CadastroEndereco;
import pacs.sgc.negocio.FabricaCadastro;

public class Fachada implements IFachada {

	private CadastroCliente clientes;
	private CadastroEndereco enderecos;
	
	
	/**
	 * Construtor Default que inicializa todos os cadastros.
	 *
	 */
	public Fachada(){
		this.clientes = FabricaCadastro.criarCadastroCliente();
		this.enderecos = FabricaCadastro.criarCadastroEndereco();
	}
	
	
	
	//*******************CLIENTE********************\\
	public void atualizarCliente(Cliente atualizado)
			throws ConexaoComBancoException, AcessoAoBancoException,
			ClienteNaoEncontradoException {
		clientes.atualizar(atualizado);
		
	}

	public int gerarCodigoCliente() throws ConexaoComBancoException,
			AcessoAoBancoException {
		return clientes.gerarCodigo();
	}

	public void inserirCliente(Cliente novoCliente)
			throws ClienteJaCadastradoException, ConexaoComBancoException,
			AcessoAoBancoException {
		clientes.inserir(novoCliente);
	}

	public List<Cliente> listarClientes() throws ConexaoComBancoException,
			AcessoAoBancoException, NenhumClienteCadastradoException {
		return clientes.listar();
	}

	public Cliente localizarCliente(String cpf, String rg)
			throws ConexaoComBancoException, AcessoAoBancoException,
			ClienteNaoEncontradoException {
		return clientes.localizar(cpf, rg);
	}

	public void removerCliente(String cpf) throws ConexaoComBancoException,
			AcessoAoBancoException, ClienteNaoEncontradoException {
		clientes.remover(cpf);
	}



	//**************************ENDERECO**********************************\\
	public void atualizarEndereco(Endereco atualizado) throws AcessoAoBancoException, ConexaoComBancoException, EnderecoNaoEncontradoException {
		this.enderecos.atualizar(atualizado);						
	}

	public int gerarCodigoEndereco() throws AcessoAoBancoException, ConexaoComBancoException {
		return this.enderecos.gerarCodigo();
	}

	public void inserirEndereco(Endereco novoEndereco) throws AcessoAoBancoException, ConexaoComBancoException, EnderecoJaCadastradoException {
		this.enderecos.inserir(novoEndereco);
	}

	public List<Endereco> listarEnderecos() throws AcessoAoBancoException, ConexaoComBancoException, NenhumEnderecoCadastradoException {
		return this.enderecos.listar();
	}
	
	public Endereco localizarEndereco(int codigo) throws ConexaoComBancoException, AcessoAoBancoException {
		return this.enderecos.localizar(codigo);
	}

	public void removerEndereco(int codigo) throws ConexaoComBancoException, AcessoAoBancoException, EnderecoNaoEncontradoException {
		this.enderecos.remover(codigo);
	}
	
	
	

}
